/*
 * 
 */
package controller;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import podologia.beansDB.Empleado;

/**
 *
 * @author Administrador
 */
public class GestorEmpleado {

    private EntityManager em;
    private EntityTransaction tx;

    /**
     *  Borra un empleado dado un idPersona un legajo y un EntityManager
     *  Borra: Practicas
     *         Permisos
     *         Cargos
     *         El Empleado y la Persona
     *
     * @param idPersona
     * @param legajo
     * @param emArg
     * @return Devuelve 1 Si todo salio bien, -1 si el legajo era 0
     */
    public int BorrarEmpleado(int idPersona, int legajo, EntityManager emArg) {
        if (legajo != 0) {
            tx = emArg.getTransaction();
            try {
                tx.begin();
                Query query = emArg.createQuery("DELETE FROM Practicaxempleado p WHERE p.empleado.legajo=:Leg");
                query.setParameter("Leg", legajo).executeUpdate();

                query = emArg.createQuery("DELETE FROM Permisoxempleado p WHERE p.legajo.legajo=:Leg");
                query.setParameter("Leg", legajo).executeUpdate();

                query = emArg.createQuery("DELETE FROM Cargoxempleado c WHERE c.legajo.legajo=:Leg");
                query.setParameter("Leg", legajo).executeUpdate();

                query = emArg.createQuery("DELETE FROM Empleado e WHERE e.legajo=:Leg");
                query.setParameter("Leg", legajo).executeUpdate();

                if (idPersona != 0) {
                    query = emArg.createQuery("DELETE FROM Persona p WHERE p.idPersona=:idP");
                    query.setParameter("idP", idPersona).executeUpdate();
                }

                tx.commit();

                return 1;
            } catch (RuntimeException ex) {
                try {
                    tx.rollback();
                    ex.printStackTrace();
                } catch (Exception x) {
                    x.printStackTrace();
                }
            }
        } else {
            return -1;
        }
        return 0;
    }

    /**
     * Borra el empleado y todos los los datos asociados (casi)
     * Borra: Practicas
     *         Permisos
     *         Cargos
     *         El Empleado y la Persona
     * @param empleado
     * @param emArg
     * @return Devuelve 1 Si todo salio bien, -1 si no se pudo borrar
     */
    public int BorrarEmpleado(Empleado empleado, EntityManager emArg) {
        if (empleado != null) {
            if (empleado.getLegajo() != 0) {
                int idPersona = (empleado.getIdPersona() != null) ? empleado.getIdPersona().getIdPersona() : 0;
                return BorrarEmpleado(idPersona, empleado.getLegajo(), emArg);
            } else {
                return -1;
            }
        } else {
            return -1;
        }
    }
}
